﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WindowsFormsModel.BusinessObjects;

namespace WindowsFormsModel
{
    public interface IModel
    {
        void Login(string userName, string password, string requestId);

        UserGroupModel GetUserGroup(string userGroupId);
        IList<UserGroupModel> GetUserGroups();
        IList<UserGroupModel> GetUserGroupsByBranch();

        int AddUserGroup(UserGroupModel userGroup);
        int UpdateUserGroup(UserGroupModel userGroup);
        int DeleteUserGroup(string userGroupId);

        IList<RestaurantModel> GetRestaurants();
        IList<RestaurantModel> GetRestaurantsByPage(int currentPage);
        int GetTotalPageFromRestaurant();
        RestaurantModel GetRestaurant(string restaurantId);
        int AddRestaurant(RestaurantModel restaurant);
        int UpdateRestaurant(RestaurantModel restaurant);
        int DeleteRestaurant(string restaurantId);

        AccountingObjectCategoryModel GetAccountingObjectCategory(string accountingObjectCategoryId);
        IList<AccountingObjectCategoryModel> GetAccountingObjectCategoriesByBranch(bool isCustomer, bool isVendor, bool isEmployee);
        IList<AccountingObjectCategoryModel> GetAccountingObjectCategoriesByBranchAndActive(bool isCustomer, bool isVendor, bool isEmployee);
        int AddAccountingObjectCategory(AccountingObjectCategoryModel accountingObjectCategory);
        int UpdateAccountingObjectCategory(AccountingObjectCategoryModel accountingObjectCategory);
        int DeleteAccountingObjectCategory(string accountingObjectCategoryId);

        IList<CountryRegionModel> GetCountryRegions();
        IList<CountryRegionModel> GetCountryRegionsActive();
        IList<CountryRegionModel> GetCountryRegionsByPage(int currentPage);
        int GetTotalPageFromCountryRegion();
        CountryRegionModel GetCountryRegion(string countryRegionCode);
        int AddCountryRegion(CountryRegionModel countryRegion);
        int UpdateCountryRegion(CountryRegionModel countryRegion);
        int DeleteCountryRegion(string countryRegionCode);

        IList<DistrictModel> GetDistricts();
        DistrictModel GetDistrict(string districtCode);
        int GetTotalPageFromDistrict();
        IList<DistrictModel> GetDistrictsActive();
        IList<DistrictModel> GetDistrictsByPage(int currentPage);
        int AddDistrict(DistrictModel district);
        int UpdateDistrict(DistrictModel district);
        int DeleteDistrict(string districtCode);

        IList<ProvinceModel> GetProvinces();
        ProvinceModel GetProvince(string ProvinceCode);
        IList<ProvinceModel> GetProvincesActive();
        int GetTotalPageFromProvince();
        IList<ProvinceModel> GetProvincesByPage(int currentPage);
        int AddProvince(ProvinceModel Province);
        int UpdateProvince(ProvinceModel Province);
        int DeleteProvince(string ProvinceCode);

        IList<AccountingObjectModel> GetAccountingObjectsByPageAndBranch(int currentPage);
        IList<AccountingObjectModel> GetAccountingObjectsByPageAndBranch(int currentPage, bool isCustomer, bool isVendor, bool isEmployee);
        IList<AccountingObjectModel> GetAccountingObjectsByPageAndBranch(int currentPage, string accountingObjectCategory);
        IList<AccountingObjectModel> GetAccountingObjectsActiveByBranch(bool isCustomer, bool isVendor, bool isEmployee);
        AccountingObjectModel GetAccountingObject(string accountingObjectId);
        int GetTotalPageFromAccountingObject(bool isCustomer, bool isVendor, bool isEmployee);
        int GetTotalPageFromAccountingObjectByBranch(bool isCustomer, bool isVendor, bool isEmployee);
        int GetTotalPageFromAccountingObjectByCategory(string accountingObjectCategoryId);
        int AddAccountingObject(AccountingObjectModel accountingObject);
        int UpdateAccountingObject(AccountingObjectModel accountingObject);
        int DeleteAccountingObject(string accountingObjectId);

        InventoryItemCategoryModel GetInventoryItemCategory(string inventoryCategoryId);
        IList<InventoryItemCategoryModel> GetInventoryItemCategoriesByBranch(bool isMaterial);
        IList<InventoryItemCategoryModel> GetInventoryItemCategoriesByBranchAndActive(bool isMaterial);
        int AddInventoryItemCategory(InventoryItemCategoryModel inventoryItemCategory);
        int UpdateInventoryItemCategory(InventoryItemCategoryModel inventoryItemCategory);
        int DeleteInventoryItemCategory(string inventoryItemCategoryId);

        StockModel GetStock(string stockId);
        IList<StockModel> GetStocksByBranch();
        IList<StockModel> GetStocksByPageAndBranch(int currentPage);
        IList<StockModel> GetStocksActive();
        IList<StockModel> GetStocksActiveByBranch();
        int GetTotalPageFromStockByBranch();
        int AddStock(StockModel stock);
        int UpdateStock(StockModel stock);
        int DeleteStock(string stockId);

        IList<UnitModel> GetUnits();
        UnitModel GetUnit(string unitId);
        int GetTotalPageFromUnit();
        IList<UnitModel> GetUnitsActive();
        IList<UnitModel> GetUnitsByPage(int currentPage);
        int AddUnit(UnitModel unit);
        int UpdateUnit(UnitModel unit);
        int DeleteUnit(string unitId);

        IList<InventoryItemModel> GetInventoryItems();
        IList<InventoryItemModel> GetInventoryItemsByPage(int currentPage, bool isMaterial);
        IList<InventoryItemModel> GetInventoryItemsByPageAndBranch(int currentPage, bool isMaterial);
        IList<InventoryItemModel> GetInventoryItemsByPageAndCategory(int currentPage, string inventoryCategoryId);
        int GetTotalPageFromInventoryItem(bool isMaterial);
        int GetTotalPageFromInventoryItemByCategory(string inventoryCategoryId);
        InventoryItemModel GetInventoryItem(string inventoryItemId);
        IList<InventoryItemModel> GetInventoryItemsActive(bool isMaterial);
        IList<InventoryItemModel> GetInventoryItemsActiveByBranch(bool isMaterial);
        int AddInventoryItem(InventoryItemModel inventoryItem);
        int UpdateInventoryItem(InventoryItemModel inventoryItem);
        int DeleteInventoryItem(string inventoryItemId);

        IList<RestaurantAreaModel> GetRestaurantAreas();
        IList<RestaurantAreaModel> GetRestaurantAreasByBranch();
        IList<RestaurantAreaModel> GetRestaurantAreasActiveByBranch();
        IList<RestaurantAreaModel> GetRestaurantAreasByPageAndBranch(int currentPage);
        int GetTotalPageFromRestaurantAreaByBranch();
        RestaurantAreaModel GetRestaurantArea(string restaurantAreaId);
        int AddRestaurantArea(RestaurantAreaModel restaurantArea);
        int UpdateRestaurantArea(RestaurantAreaModel restaurantArea);
        int DeleteRestaurantArea(string restaurantAreaId);

        IList<RestaurantTableModel> GetRestaurantTables();
        IList<RestaurantTableModel> GetRestaurantTablesByPageAndBranch(int currentPage);
        IList<RestaurantTableModel> GetRestaurantTablesByPageAndArea(int currentPage, string restaurantAreaId);
        int GetTotalPageFromRestaurantTableByBranch();
        int GetTotalPageFromRestaurantTableByBranchAndAera(string restaurantAreaId);
        RestaurantTableModel GetRestaurantTable(string restaurantTableId);
        int AddRestaurantTable(RestaurantTableModel restaurantTable);
        int UpdateRestaurantTable(RestaurantTableModel restaurantTables);
        int DeleteRestaurantTable(string restaurantTableId);

        RestaurantMenuCategoryModel GetRestaurantMenuCategory(string menuCategoryId);
        IList<RestaurantMenuCategoryModel> GetRestaurantMenuCategoriesByBranch();
        IList<RestaurantMenuCategoryModel> GetRestaurantMenuCategoriesActiveByBranch();
        int AddRestaurantMenuCategory(RestaurantMenuCategoryModel restaurantMenuCategory);
        int UpdateRestaurantMenuCategory(RestaurantMenuCategoryModel restaurantMenuCategory);
        int DeleteRestaurantMenuCategory(string restaurantMenuCategoryId);

        IList<RestaurantMenuModel> GetRestaurantMenusPagedByBranch(int currentPage);
        IList<RestaurantMenuModel> GetRestaurantMenusActiveByBranch();
        IList<RestaurantMenuModel> GetRestaurantMenusPagedByCategory(int currentPage, string menuCategoryId);
        int GetTotalPageFromRestaurantMenu();
        int GetTotalPageFromRestaurantMenuByCategory(string menuCategoryId);
        RestaurantMenuModel GetRestaurantMenu(string menudId);
        void AddRestaurantMenu(RestaurantMenuModel restaurantMenu);
        void UpdateRestaurantMenu(RestaurantMenuModel restaurantMenu);
        int DeleteRestaurantMenu(string menudId);

        RestaurantMenuNormModel GetRestaurantMenuNorm(string menuNormId);
        IList<RestaurantMenuNormModel> GetRestaurantMenuNormsPageByBranch(int currentPage);
        int GetTotalPageFromRestaurantMenuNormByBranch();
        int AddRestaurantMenuNorm(RestaurantMenuNormModel restaurantMenuNorm);
        int UpdateRestaurantMenuNorm(RestaurantMenuNormModel restaurantMenuNorm);
        int DeleteRestaurantMenuNorm(string menudNormId);

        IList<CurrencyModel> GetCurrencies();
        IList<CurrencyModel> GetCurrenciesActive();
        IList<CurrencyModel> GetCurrenciesByPage(int currentPage);
        CurrencyModel GetCurrency(string currencyId);
        int GetTotalPageFromCurrency();
        int AddCurrency(CurrencyModel currency);
        int UpdateCurrency(CurrencyModel currency);
        int DeleteCurrency(string currencyId);

        DepartmentModel GetDepartment(string departmentId);
        IList<DepartmentModel> GetDepartmentsByBranch();
        IList<DepartmentModel> GetDepartmentsActiveByBranch();
        int AddDepartment(DepartmentModel department);
        int UpdateDepartment(DepartmentModel department);
        int DeleteDepartment(string departmentId);

        IList<TimeSheetSignModel> GetTimeSheetSigns();
        IList<TimeSheetSignModel> GetTimeSheetSignsActive();
        IList<TimeSheetSignModel> GetTimeSheetSignPaged(int currentPage);
        int GetTotalPageFromTimeSheetSign();
        TimeSheetSignModel GetTimeSheetSign(string timeSheetSignId);
        int AddTimeSheetSign(TimeSheetSignModel timeSheetSign);
        int UpdateTimeSheetSign(TimeSheetSignModel timeSheetSign);
        int DeleteTimeSheetSign(string timeSheetSignId);

        IList<ShipMethodModel> GetShipMethods();
        IList<ShipMethodModel> GetShipMethodsActive();
        IList<ShipMethodModel> GetShipMethodsByPage(int currentPage);
        int GetTotalPageFromShipMethod();
        ShipMethodModel GetShipMethod(string shipMethodId);
        int AddShipMethod(ShipMethodModel shipMethod);
        int UpdateShipMethod(ShipMethodModel shipMethod);
        int DeleteShipMethod(string shipMethodId);

        AutoIDModel GetAutoID(string autoId);
        AutoIDModel GetAutoIDByRefType(int refType);
        int UpdateAutoID(AutoIDModel autoId);

        IList<InwardOutwardModel> GetInwardOutwardsByBranch(int refType, int currentPage, bool isMaterial);
        InwardOutwardModel GetInwardOutwardModel(string refId);
        int GetTotalPageFromInwardOutwardByBranch(int refType, bool isMaterial);
        int AddInwardOutward(InwardOutwardModel inwardOutward, string refTypeName);
        int UpdateInwardOutward(InwardOutwardModel inwardOutward, string refTypeName);
    }
}